package com.fiap.to;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.PrePersist;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name = "AM_PECA")
public class PecaTO implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Id
	@GenericGenerator(name = "seq_peca", strategy = "increment")
	@GeneratedValue(generator = "seq_peca")
	@Column(name = "ID_PECA")
	private int id_peca;
	@Column(length = 40)
	private String fabricante;
	@Column(length = 20)
	private String modelo;
	@Column(length = 80, nullable = false)
	private String tipo;
	@OneToOne
	@JoinColumn(name = "ID_MANUAL")
	private ManualTO manual;
	@ManyToOne
	@JoinColumn(name = "ID_FORNECEDOR")
	private FornecedorTO fornecedor;
	@Column(length = 15, nullable = true)
	private String medidas;
	@OneToMany
	@JoinTable(name= "AM_PECA_SIMILARES")
	private List<PecaTO> similares;
	@Column(length = 3)
	private int qntMinima;
	@Column(length = 8, precision = 2)
	private double valorPeca;
	@Column(length = 8, precision = 2)
	private double valorPago;
	@Transient
	@OneToMany(cascade=CascadeType.PERSIST, fetch=FetchType.EAGER)
	@JoinColumn(name="ID_MODELO")
	private List<ModeloCarroTO> aplicacoes;

	@PrePersist
	private void executaAntesDePersistir() {
		System.out.println("Persistindo...");
	}

	public PecaTO() {
		super();
		// TODO Auto-generated constructor stub
	}



	/**
	 * @param id_peca
	 * @param fabricante
	 * @param modelo
	 * @param tipo
	 * @param manual
	 * @param fornecedor
	 * @param medidas
	 * @param similares
	 * @param qntMinima
	 * @param valorPeca
	 * @param valorPago
	 * @param aplicacoes
	 */
	public PecaTO(int id_peca, String fabricante, String modelo, String tipo,
			ManualTO manual, FornecedorTO fornecedor, String medidas,
			List<PecaTO> similares, int qntMinima, double valorPeca,
			double valorPago, List<ModeloCarroTO> aplicacoes) {
		super();
		this.id_peca = id_peca;
		this.fabricante = fabricante;
		this.modelo = modelo;
		this.tipo = tipo;
		this.manual = manual;
		this.fornecedor = fornecedor;
		this.medidas = medidas;
		this.similares = similares;
		this.qntMinima = qntMinima;
		this.valorPeca = valorPeca;
		this.valorPago = valorPago;
		this.aplicacoes = aplicacoes;
	}

	public int getId_peca() {
		return id_peca;
	}

	public void setId_peca(int id_peca) {
		this.id_peca = id_peca;
	}

	public String getFabricante() {
		return fabricante;
	}

	public void setFabricante(String fabricante) {
		this.fabricante = fabricante;
	}

	public String getModelo() {
		return modelo;
	}

	public void setModelo(String modelo) {
		this.modelo = modelo;
	}

	public ManualTO getManual() {
		return manual;
	}

	public void setManual(ManualTO manual) {
		this.manual = manual;
	}

	public FornecedorTO getFornecedor() {
		return fornecedor;
	}

	public void setFornecedor(FornecedorTO fornecedor) {
		this.fornecedor = fornecedor;
	}

	public String getMedidas() {
		return medidas;
	}

	public void setMedidas(String medidas) {
		this.medidas = medidas;
	}

	public List<PecaTO> getSimilares() {
		return similares;
	}

	public void setSimilares(List<PecaTO> similares) {
		this.similares = similares;
	}

	public int getQntMinima() {
		return qntMinima;
	}

	public void setQntMinima(int qntMinima) {
		this.qntMinima = qntMinima;
	}

	public double getValorPeca() {
		return valorPeca;
	}

	public void setValorPeca(double valorPeca) {
		this.valorPeca = valorPeca;
	}

	public double getValorPago() {
		return valorPago;
	}

	public void setValorPago(double valorPago) {
		this.valorPago = valorPago;
	}

	public List<ModeloCarroTO> getAplicacoes() {
		return aplicacoes;
	}

	public void setAplicacoes(List<ModeloCarroTO> aplicacoes) {
		this.aplicacoes = aplicacoes;
	}

	public String getTipo() {
		return tipo;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}
	
}
